﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using FB.DataAccess.DataInf;
using FB.Utilities;

namespace FB.DataAccess
{
    public class Video_CategoryDAO : IVideo_CategoryDAO
    {
        private static FBDATA dataContext;

        private IRepository<Video_Category> repository;
        public Video_CategoryDAO()
        {
            dataContext = new FBDATA();
            repository = new RepositoryDAO<Video_Category>(dataContext);
        }

        public IEnumerable<Video_Category> GetAllVideo_Category()
        {
            return repository.GetQuery().OrderBy(aobj => aobj.ID);
        }
        public Video_Category GetVideo_CategoryByID(Guid id)
        {
            return repository.Find(obj => obj.ID == id).SingleOrDefault();
        }
        public Video_Category GetLastRecord()
        {
            return dataContext.Video_Category.OrderByDescending(obj => obj.ID).FirstOrDefault();
        }

        public bool UpdateVideo_Category(Video_Category inVideo_Category)
        {
            if (inVideo_Category == null) return false;
            Video_Category upVideo_Category = repository.First(sobj => sobj.ID == inVideo_Category.ID);
            if (upVideo_Category == null) return false;
            upVideo_Category.IDVideo = inVideo_Category.IDVideo;
            upVideo_Category.IDCategory = inVideo_Category.IDCategory;
            return repository.SaveChanges() > 0;
        }
        public bool InsertVideo_Category(Video_Category inVideo_Category)
        {
            if (inVideo_Category == null) return false;
            repository.Add(inVideo_Category);
            return repository.SaveChanges() > 0;
        }

        public ReturnValue<bool> DelVideo_Category(Guid id)
        {
            ReturnValue<bool> ret = new ReturnValue<bool>(false, "");
            try
            {
                Video_Category objDel = repository.First(obj => obj.ID == id);
                ret = DelVideo_Category(objDel);
            }
            catch (Exception ex)
            {
                ret.RetValue = false;
                ret.Msg = "Dữ liệu đã được sử dung trong chương trình - không thể xóa !";
            }
            return ret;
        }


        public ReturnValue<bool> DelVideo_Category(Video_Category inVideo_Category)
        {
            ReturnValue<bool> ret = new ReturnValue<bool>(false, "");
            if (inVideo_Category == null)
            {
                ret.Msg = "input null";
                return ret;
            }
            try
            {
                repository.Delete(inVideo_Category);
                ret.RetValue = repository.SaveChanges() > 0;
            }
            catch (System.Exception ex)
            {
                ret.RetValue = false;
                ret.Msg = "Dữ liệu đã được sử dung trong chương trình - không thể xóa !";
            }
            return ret;
        }
        public IEnumerable<Video_Category> GetCategoryIDOfVideo(Guid videoID)
        {
            return repository.Find(obj => obj.IDVideo == videoID);
        }

        public void DeleteVideo_CategoryByVideoID(Guid videoID)
        {
            IEnumerable<Video_Category> CateList = GetCategoryIDOfVideo(videoID);
            foreach (Video_Category item in CateList.ToList())
            {
                DelVideo_Category(item);
            }
        }
    }
}
